Wraps the IExplorerBrowser interface.
IExplorerBrowser is a browser object that can be either navigated or that can host a view of a data object. As a full-featured browser object, it also supports an automatic travel log.
The Shell provides a default implementation of IExplorerBrowser as CLSID_ExplorerBrowser. Typically, a developer does not need to provide a custom implementation of this interface.
Creates an instance of the IExplorerBrowser interface.
#define _WIN32_WINNT &h0602
#INCLUDE ONCE "AfxNova/CWindow.inc"
#INCLUDE ONCE "AfxNova/CExplorerBrowser.inc"
USING AfxNova
DECLARE FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _
BYVAL hPrevInstance AS HINSTANCE, _
BYVAL pwszCmdLine AS WSTRING PTR, _
BYVAL nCmdShow AS LONG) AS LONG
END wWinMain(GetModuleHandleW(NULL), NULL, wCommand(), SW_NORMAL)
' // Forward declaration
DECLARE FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT
' ========================================================================================
' Main
' ========================================================================================
FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _
BYVAL hPrevInstance AS HINSTANCE, _
BYVAL pwszCmdLine AS WSTRING PTR, _
BYVAL nCmdShow AS LONG) AS LONG
' // Set process DPI aware
SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE)
' // Enable visual styles without including a manifest file
AfxEnableVisualStyles
' // Creates the main window
DIM pWindow AS CWindow = "MyClassName" ' Use the name you wish
DIM hWin AS HWND = pWindow.Create(NULL, "Explorer Browser", @WndProc)
' // Sizes it by setting the wanted width and height of its client area
pWindow.SetClientSize(620, 400)
' // Centers the window
pWindow.Center
' // Displays the window and dispatches the Windows messages
FUNCTION = pWindow.DoEvents(nCmdShow)
END FUNCTION
' ========================================================================================
' ========================================================================================
' Main window procedure
' ========================================================================================
FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT
STATIC peb AS CExplorerBrowser PTR
SELECT CASE uMsg
' // If an application processes this message, it should return zero to continue
' // creation of the window. If the application returns –1, the window is destroyed
' // and the CreateWindowExW function returns a NULL handle.
CASE WM_CREATE
' // Creates an instance of the Explorer Browser
peb = NEW CExplorerBrowser
IF peb = NULL THEN RETURN 0
peb->SetOptions(EBO_SHOWFRAMES)
DIM fs AS FOLDERSETTINGS
fs.ViewMode = FVM_DETAILS
DIM rc AS RECT
GetClientRect hwnd, @rc
peb->Initialize(hwnd, @rc, @fs)
' // Navigate to the Profile folder
DIM pidlBrowse AS ITEMIDLIST PTR
IF SUCCEEDED(SHGetFolderLocation(NULL, CSIDL_PROGRAM_FILES, NULL, 0, @pidlBrowse)) THEN
peb->BrowseToIDList(pidlBrowse, SBSP_ABSOLUTE)
ILFree(pidlBrowse)
END IF
RETURN 0
' // Sent when the user selects a command item from a menu, when a control sends a
' // notification message to its parent window, or when an accelerator keystroke is translated.
CASE WM_COMMAND
SELECT CASE CBCTL(wParam, lParam)
CASE IDCANCEL
' // If ESC key pressed, close the application by sending an WM_CLOSE message
IF CBCTLMSG(wParam, lParam) = BN_CLICKED THEN SendMessageW(hwnd, WM_CLOSE, 0, 0)
END SELECT
RETURN 0
CASE WM_SIZE
' // Resize the explorer browser
DIM rc AS REct
GetClientRect hwnd, @rc
IF peb THEN peb->SetRect(NULL, rc)
RETURN 0
CASE WM_DESTROY
' // Destroy the CExplorerBrowser class
IF peb THEN Delete peb
' // End the application by sending an WM_QUIT message
PostQuitMessage(0)
RETURN 0
END SELECT
' // Default processing of Windows messages
FUNCTION = DefWindowProcW(hwnd, uMsg, wParam, lParam)
END FUNCTION
' ========================================================================================
| Name | Description |
|---|---|
| Advise | Initiates a connection with IExplorerBrowser for event callbacks. |
| BroseToIDList | Browses to a pointer to an item identifier list (PIDL) |
| BroseToObject | Browses to an object. |
| Destroy | Destroys the browser. |
| FillFromObject | Creates a results folder and fills it with items. |
| GetCurrentView | Gets an interface for the current view of the browser. |
| GetOptions | Gets the current browser options. |
| Initialize | Prepares the browser to be navigated. |
| NavigateBack | Navigate back programatically. |
| NavigateForward | Navigate forward programatically. |
| NavigateTo | Navigate to the specified folder. |
| NavigateToParent | Navigate to the parent folder. |
| RemoveAll | Removes all items from the results folder. |
| SetEmptyText | Sets the default empty text. |
| SetEvents | Sets a connection with IExplorerBrowserEvents for event callbacks. |
| SetFolderSettings | Sets the folder settings for the current view. |
| SetOptions | Sets the current browser options. |
| SetPropertyBag | Sets the name of the property bag. |
| SetRect | Sets the size and position of the view windows created by the browser. |
| Unadvise | Terminates an advisory connection. |
| Name | Description |
|---|---|
| GetLastResult | Returns the last result code. |
| SetResult | Sets the last result code. |
| GetErrorInfo | Returns a localized description of the last result code. |
| GetPtr | Returns a raw pointer to the underlying IExplorerBrowser interface. |
| ObjPtr | Returns an AddRef’ed pointer to the underlying IExplorerBrowser interface. |
The IExplorerBrowserEvents interface exposes methods for notification of Explorer browser navigation and view creation events.
| Name | Description |
|---|---|
| OnNavigationComplete | Notifies clients that the Explorer browser has successfully navigated to a Shell folder. |
| OnNavigationEnding | Notifies clients of a pending Explorer browser navigation to a Shell folder. |
| OnNavigationFailed | Notifies clients that the Explorer browser has failed to navigate to a Shell folder. |
| OnViewCreated | Notifies clients that the view of the Explorer browser has been created and can be modified. |
Returns the last result code
FUNCTION GetLastResult () AS HRESULT
RETURN m_Result
END FUNCTION
Sets the last result code.
FUNCTION SetResult (BYVAL Result AS HRESULT) AS HRESULT
m_Result = Result
RETURN m_Result
END FUNCTION
| Parameter | Description |
|---|---|
| Result | The HRESULT error code returned by the methods. |
Returns a description of the last result code.
FUNCTION GetErrorInfo (BYVAL nError AS LONG = -1) AS DWSTRING
Returns a raw pointer to the underlying IExplorerBrowser interface. Don’t release this pointer.
FUNCTION ObjPtr () AS IExplorerBrowser PTR
Returns an AddRef’ed pointer to the underlying IExplorerBrowser interface. You musr release this pointer calling the Release method.
FUNCTION ObjPtr () AS IExplorerBrowser PTR
Prepares the browser to be navigated.
FUNCTION Initialize (BYVAL hwndParent AS HWND, BYVAL prc AS RECT PTR, _
BYVAL pfs AS FOLDERSETTINGS PTR) AS HRESULT
| Parameter | Description |
|---|---|
| hwndParent | A handle to the owner window or control. |
| prc | A pointer to a RECT that contains the coordinates of the bounding rectangle that the browser will occupy. The coordinates are relative to hwndParent. |
| pfs | A pointer to a FOLDERSETTINGS structure that determines how the folder will be displayed in the view. If this parameter is NULL, then you must call SetFolderSettings; otherwise, the default view settings for the folder are used. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
After calling the Initialize method, it is the responsibility of the caller to call the Destroy method to destroy the browser and free any memory and windowed resources associated with the browser.
The CExplorerBrowser class calls the Destroy method when the class ends.
Destroys the browser.
FUNCTION Destroy () AS HRESULT
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
If method Initialize was called, then method Destroy must be called to free resources. Failure to call Destroy may cause a memory leak.
The CExplorerBrowser class calls the Destroy method when the class ends.
Initiates a connection with IExplorerBrowser for event callbacks.
FUNCTION Advise (BYVAL psbe AS IExplorerBrowserEvents PTR, BYVAL pdwCookie AS DWORD) AS HRESULT
FUNCTION Advise (BYVAL psbe AS IExplorerBrowserEvents PTR) AS DWORD
| Parameter | Description |
|---|---|
| psbe | A pointer to the IExplorerBrowserEvents interface of the object to be advised of IExplorerBrowser events. |
| pdwCookie | A token that uniquely identifies the event listener. |
First overloaded function: If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Second overloaded function: Returns token that uniquely identifies the event listener. To get the result code, call the GetLastResult method.
This method is called by an implementer of IExplorerBrowserEvents. The implementer (listener) is advised of ExplorerBrowser view and navigation events by callback of the methods of IExplorerBrowserEvents.
Call Advise to initiate an advisory connection prior to the first IExplorerBrowser navigation. Callbacks to event listeners are made as the browser is browsing.
The first browse happens synchronously to a call on BrowseToObject, or a similar method. Future callbacks happen asynchronously, as the browser browses.
When the connection is no longer needed, call method Unadvise to terminate the connection.
The CExplorerBrowser class provides the method SetEvents that calls the Advise methods, stores the cookie and calls Unadvise when the class ends.
Terminates an advisory connection.
FUNCTION Unadvise (BYVAL dwCookie AS DWORD) AS HRESULT
| Parameter | Description |
|---|---|
| dwCookie | A connection token previously returned from Advise. Identifies the connection to be terminated. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Terminates an advisory connection previously established through method Advise. The dwCookie parameter identifies the connection to terminate. Failure to call Unadvise, may result in a memory leak.
The CExplorerBrowser class provides the method SetEvents that calls the Advise methods, stores the cookie and calls Unadvise when the class ends.
Browses to a pointer to an item identifier list (PIDL)
FUNCTION BrowseToIDList (BYVAL pidl AS LPCITEMIDLIST, BYVAL uFlags AS UINT) AS HRESULT
| Parameter | Description |
|---|---|
| pidl | Type: PCUIDLIST_RELATIVE. A pointer to a const ITEMIDLIST (item identifier list) that specifies an object’s location as the destination to navigate to. This parameter can be NULL. |
| uFlags | A flag that specifies the category of the pidl. This affects how navigation is accomplished. Must be the value zero, or a bitwise combination of the following values. |
| Flag | Description |
|---|---|
| SBSP_ABSOLUTE | An absolute PIDL, relative to the desktop. |
| SBSP_RELATIVE | A relative PIDL, relative to the current folder. |
| SBSP_PARENT | Browse to the parent folder, ignore the PIDL. |
| SBSP_NAVIGATEBACK | Navigate back, ignore the PIDL. |
| SBSP_NAVIGATEFORWARD | Navigate forward, ignore the PIDL. |
| SBSP_KEEPWORDWHEELTEXT | Windows Vista and later. This flag indicates that any search text entered by a WordWheel (the Search box in Windows Explorer) should be preserved during this navigation, so that items at the new location are filtered in the same way they were filtered at the previous location. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
The parameter pidl may be NULL if the flags specified in uFlags indicate navigation through the built-in TravelLog, that is, SBSP_NAVIGATEBACK or SBSP_NAVIGATEFORWARD.
This method supports only a subset of the SBSP flags listed in the shobjidl.bi file. Consequently, this method returns E_INVALIDARG if SBSP_NEWBROWSER or SBSP_EXPLOREMODE are specified in uFlags.
Browses to an object.
FUNCTION BrowseToObject (BYVAL punk AS IUnknown PTR, BYVAL uFlags AS UINT) AS HRESULT
| Parameter | Description |
|---|---|
| punk | A pointer to an object to browse to. If the object cannot be browsed, an error value is returned. |
| uFlags | A flag that specifies the category of the pidl. This affects how navigation is accomplished. Must be the value zero, or a bitwise combination of the following values. |
| Flag | Description |
|---|---|
| SBSP_ABSOLUTE | An absolute PIDL, relative to the desktop. |
| SBSP_RELATIVE | A relative PIDL, relative to the current folder. |
| SBSP_PARENT | Browse to the parent folder, ignore the PIDL. |
| SBSP_NAVIGATEBACK | Navigate back, ignore the PIDL. |
| SBSP_NAVIGATEFORWARD | Navigate forward, ignore the PIDL. |
| SBSP_KEEPWORDWHEELTEXT | Windows Vista and later. This flag indicates that any search text entered by a WordWheel (the Search box in Windows Explorer) should be preserved during this navigation, so that items at the new location are filtered in the same way they were filtered at the previous location. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
uFlags may be any of the EXPLORER_BROWSER_FILL_FLAGS or any of the flags defined in BrowseObject’s wFlags parameter, except for flags that indicate navigation.
This method calls GetIDList and browses to the pidl returned. It operates in the same way as BrowseToIDList, except that punk cannot be NULL. Standard usage is to browse to an IShellFolder or an IShellItem. An error will be returned if the object passed in cannot be browsed through. An object that can be browsed through implements either IPersistFolder2 or IPersistIDList.
The first navigation of IExplorerBrowser is synchronous. After that, all navigations are asynchronous. As a result, calls to BrowseToObject will succeed if you properly set up the pending navigation, but that does not guarantee the navigation will succeed. To be informed of success and failure, clients should implement IExplorerBrowserEvents and respond appropriately in OnNavigationComplete and OnNavigationFailed.
Creates a results folder and fills it with items.
FUNCTION FillFromObject (BYVAL punk AS IUnknown PTR, _
BYVAL dwFlags AS EXPLORER_BROWSER_FILL_FLAGS) AS HRESULT
| Parameter | Description |
|---|---|
| punk | An interface pointer on the source object that will fill the IResultsFolder. This can be an IDataObject or any object that can be used with INamespaceWalk. |
| dwFlags | One of the EXPLORER_BROWSER_FILL_FLAGS values. |
EXPLORER_BROWSER_FILL_FLAGS
| Flag | Description |
|---|---|
| EBF_NONE | No flags. |
| EBF_SELECTFROMDATAOBJECT | Causes FillFromObject to first populate the results folder with the contents of the parent folders of the items in the data object, and then select only the items that are in the data object. |
| EBF_NODROPTARGET | Do not allow dropping on the folder. In other words, do not register a drop target for the view. Applications can then register their own drop targets. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
The object passed via interface pointer punk fills IResultsFolder.
The parameter dwFlags can be any of the EXPLORER_BROWSER_FILL_FLAGS or any of the flags defined in BrowseObject’s wFlags parameter, except for flags that indicate navigation.
The parameter punk can be any object that INamespaceWalk can consume. If called with EBF_SELECTFROMDATAOBJECT, punk must be an IDataObject and the namespace will be walked at the parent level of the data object, including all peer items, but selecting only those contained in the data object. This flag is most commonly used when FOLDERSETTINGS have FWF_CHECKSELECT enabled, allowing check-selection of a set of items that have been compiled in the data object.
Note. If a pointer to an item identifier list (PIDL) in the data object is fully qualified, the parent folder cannot be successfully walked, because desktop folder items would be added to the list.
This method may be called more than once, with each successive call adding additional items to the view. RemoveAll may be called to clear the contents of the results folder. This function should be called with EBF_NODROPTARGET to prevent users from drag dropping new items into the view, unless this is desired. Setting EBO_NAVIGATEONCE is also recommended so that the browser will stay in the ResultsFolder, preventing the user from navigating to a folder that may be represented in the data object.
To manipulate items in the results folder directly, call GetCurrentView to get the view from ExplorerBrowser and then ask the view for results folder using GetFolder. Using the obtained results folder enables manipulation of the data in the folder with more flexibility than with the methods that IExplorerBrowser provides.
Gets an interface for the current view of the browser.
FUNCTION GetCurrentView (BYVAL riid AS IID PTR, BYVAL ppv AS ANY PTR PTR) AS HRESULT
FUNCTION GetCurrentView (BYVAL riid AS IID PTR) AS ANY PTR
| Parameter | Description |
|---|---|
| riid | A reference to the desired interface ID. |
| ppv | When this method returns, contains the interface pointer requested in riid. This will typically be IShellView, IShellView2, IFolderView, or a related interface. |
First overloaded method: If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Second overloaded method: The interface pointer requested in riid.
Sets the size and position of the view windows created by the browser.
FUNCTION SetRect (BYVAL phdwp AS HDWP PTR, BYVAL rcBrowser AS RECT) AS HRESULT
| Parameter | Description |
|---|---|
| phdwp | A pointer to a DeferWindowPos handle. This parameter can be NULL. |
| rcBrowser | The coordinates that the browser will occupy. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Coordinates are relative to the hwndParent passed in Initialize.
Sets the name of the property bag.
FUNCTION SetPropertyBag (BYREF wszPropertyBag AS WSTRING) AS HRESULT
| Parameter | Description |
|---|---|
| wszPropertyBag | A null-terminated, Unicode string that contains the name of the property bag. View state information that is specific to the application of the client is stored (persisted) using this name. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
ExplorerBrowser can retrieve the properties stored in the property bag by calling function SHGetViewStatePropertyBag. ExplorerBrowser writes to this property bag which is also stored (persisted) in the registry. Persistence occurs automatically when ExplorerBrowser destroys the current view, begins a navigation, or is destroyed. After any of these events, it writes information about the view state in case it has been modified by the user.
If no properties have been stored, the default view state of the ExplorerBrowser is used. The default view state is the view state that the user has set for a particular location, or if the view state for a location has not been set (never modified by the user), then the default view state is based on the template for the file type (for example, documents, music and pictures) at the location. All Explorer windows use the same sequence to determine the default view state.
Sets the default empty text.
FUNCTION SetEmptyText (BYREF wszEmptyText AS WSTRING) AS HRESULT
| Parameter | Description |
|---|---|
| wszEmptyText | A null-terminated, Unicode string that contains the empty text. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
The text set is displayed when the Explorer browser view is empty.
This method applies the empty text string to the current view and sets the default empty text string that is used when navigating to another location.
If this method is not called, the empty text will default to the text provided by the folder that has been navigated to.
Sets the folder settings for the current view.
FUNCTION SetFolderSettings (BYVAL pfs AS FOLDERSETTINGS PTR) AS HRESULT
FUNCTION SetFolderSettings (BYVAL ViewMode AS UINT, BYVAL fFlags AS UINT) AS HRESULT
| Parameter | Description |
|---|---|
| pfs | A pointer to a FOLDERSETTINGS structure that contains the folder settings to be applied. |
| Parameter | Description |
|---|---|
| ViewMode | Folder view mode. One of the FOLDERVIEWMODE values. |
| fFlags | A set of flags that indicate the options for the folder. This can be zero or a combination of the FOLDERFLAGS values. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
This method also changes the default that will be applied when navigating to another location.
To ensure the view state is preserved across sessions, specify the persistence name using SetPropertyBag.
Sets the current browser options.
FUNCTION SetOptions (BYVAL dwFlag AS EXPLORER_BROWSER_OPTIONS) AS HRESULT
| Parameter | Description |
|---|---|
| dwFlag | One or more EXPLORER_BROWSER_OPTIONS flags to be set. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
This action overrides any previous options.
Frames are disabled by default. To enable frames and get the default set of panes, set the EBO_SHOWFRAMES flag using the SetOptions method. The default panes, listed as IExplorerPaneVisibility constants, are these:
See IExplorerPaneVisibility.GetPaneState for more information.
Gets the current browser options.
FUNCTION GetOptions (BYVAL pdwFlag AS EXPLORER_BROWSER_OPTIONS PTR) AS HRESULT
FUNCTION GetOptions () AS EXPLORER_BROWSER_OPTIONS
| Parameter | Description |
|---|---|
| pdwFlag | When this method returns, contains the current EXPLORER_BROWSER_OPTIONS for the browser. |
First overloaded function: If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Second overloaded function: Returns the current browser options.
Removes all items from the results folder.
FUNCTION RemoveAll () AS HRESULT
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Navigate back programatically.
FUNCTION NavigateBack () AS HRESULT
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Navigate forward programatically.
FUNCTION NavigateForward () AS HRESULT
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Navigate to the parent folder programatically.
FUNCTION NavigateToParent () AS HRESULT
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Navigate to the specified folder.
FUNCTION NavigateTo (BYREF wszPath AS WSTRING) AS HRESULT
| Parameter | Description |
|---|---|
| wszPath | The path to the folder. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Sets a connection with IExplorerBrowserEvents for event callbacks.
FUNCTION SetEvents (BYVAL pebe AS IExplorerBrowserEvents PTR) AS HRESULT
| Parameter | Description |
|---|---|
| pebe | A pointer to the IExplorerBrowserEvents interface of the object to be advised of IExplorerBrowser events. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
#define _WIN32_WINNT &h0602
#define _CEXPBROW_DEBUG_ 1
#INCLUDE ONCE "AfxNova/CWindow.inc"
#INCLUDE ONCE "AfxNova/CExplorerBrowser.inc"
USING AfxNova
DECLARE FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _
BYVAL hPrevInstance AS HINSTANCE, _
BYVAL pwszCmdLine AS WSTRING PTR, _
BYVAL nCmdShow AS LONG) AS LONG
END wWinMain(GetModuleHandleW(NULL), NULL, wCommand(), SW_NORMAL)
' // Forward declaration
DECLARE FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT
' ========================================================================================
' Main
' ========================================================================================
FUNCTION wWinMain (BYVAL hInstance AS HINSTANCE, _
BYVAL hPrevInstance AS HINSTANCE, _
BYVAL pwszCmdLine AS WSTRING PTR, _
BYVAL nCmdShow AS LONG) AS LONG
' // Set process DPI aware
SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE)
' // Enable visual styles without including a manifest file
AfxEnableVisualStyles
' // Creates the main window
DIM pWindow AS CWindow = "MyClassName" ' Use the name you wish
DIM hWin AS HWND = pWindow.Create(NULL, "Explorer Browser", @WndProc)
' // Sizes it by setting the wanted width and height of its client area
pWindow.SetClientSize(620, 400)
' // Centers the window
pWindow.Center
' // Displays the window and dispatches the Windows messages
FUNCTION = pWindow.DoEvents(nCmdShow)
END FUNCTION
' ========================================================================================
' ########################################################################################
' CExplorerBrowserEventsImpl class
' Implementation of the IExplorerBrowserEvents callback interface
' ########################################################################################
TYPE CExplorerBrowserEventsImpl EXTENDS CExplorerBrowserEvents
DECLARE FUNCTION OnNavigationPending (BYVAL pidlFolder AS PCIDLIST_ABSOLUTE ) AS HRESULT
DECLARE FUNCTION OnViewCreated (BYVAL psv AS IShellView PTR) AS HRESULT
DECLARE FUNCTION OnNavigationComplete (BYVAL pidlFolder AS PCIDLIST_ABSOLUTE ) AS HRESULT
DECLARE FUNCTION OnNavigationFailed (BYVAL pidlFolder AS PCIDLIST_ABSOLUTE ) AS HRESULT
END TYPE
' ========================================================================================
' Notifies clients of a pending Explorer browser navigation to a Shell folder.
' ========================================================================================
FUNCTION CExplorerBrowserEventsImpl.OnNavigationPending (BYVAL pidlFolder AS PCIDLIST_ABSOLUTE ) AS HRESULT
CEXPBROW_DP("- pidlFolder: " & WSTR(pidlFolder))
DIM wszName AS WSTRING * MAX_PATH
SHGetPathFromIDListW(pidlFolder, @wszName)
CEXPBROW_DP("- " & wszName)
RETURN S_OK
END FUNCTION
' ========================================================================================
' ========================================================================================
' Notifica a los clientes que se ha creado la vista del explorador Explorador y que se pueden modificar.
' ========================================================================================
FUNCTION CExplorerBrowserEventsImpl.OnViewCreated (BYVAL psv AS IShellView PTR) AS HRESULT
CEXPBROW_DP("- pShellView: " & WSTR(psv))
RETURN S_OK
END FUNCTION
' ========================================================================================
' ========================================================================================
' Notifies clients that the Explorer browser has successfully navigated to a Shell folder.
' ========================================================================================
FUNCTION CExplorerBrowserEventsImpl.OnNavigationComplete (BYVAL pidlFolder AS PCIDLIST_ABSOLUTE ) AS HRESULT
CEXPBROW_DP("- pidlFolder: " & WSTR(pidlFolder))
DIM wszName AS WSTRING * MAX_PATH
SHGetPathFromIDListW(pidlFolder, @wszName)
CEXPBROW_DP("- " & wszName)
RETURN S_OK
END FUNCTION
' ========================================================================================
' ========================================================================================
' Notifies clients that the Explorer browser has failed to navigate to a Shell folder.
' ========================================================================================
FUNCTION CExplorerBrowserEventsImpl.OnNavigationFailed (BYVAL pidlFolder AS PCIDLIST_ABSOLUTE ) AS HRESULT
CEXPBROW_DP("- pidlFolder: " & WSTR(pidlFolder))
DIM wszName AS WSTRING * MAX_PATH
SHGetPathFromIDListW(pidlFolder, @wszName)
CEXPBROW_DP("- " & wszName)
RETURN S_OK
END FUNCTION
' ========================================================================================
' ########################################################################################
' Main window procedure
' ########################################################################################
FUNCTION WndProc (BYVAL hwnd AS HWND, BYVAL uMsg AS UINT, BYVAL wParam AS WPARAM, BYVAL lParam AS LPARAM) AS LRESULT
STATIC peb AS CExplorerBrowser PTR
SELECT CASE uMsg
' // If an application processes this message, it should return zero to continue
' // creation of the window. If the application returns –1, the window is destroyed
' // and the CreateWindowExW function returns a NULL handle.
CASE WM_CREATE
' // Creates an instance of the Explorer Browser
peb = NEW CExplorerBrowser
IF peb = NULL THEN RETURN 0
peb->SetOptions(EBO_SHOWFRAMES)
DIM fs AS FOLDERSETTINGS
fs.ViewMode = FVM_DETAILS
DIM rc AS RECT
GetClientRect hwnd, @rc
peb->Initialize(hwnd, @rc, @fs)
' // Set events
DIM pebe AS ANY PTR = NEW CExplorerBrowserEventsImpl
peb->SetEvents(pebe)
' // Navigate to the Profile folder
DIM pidlBrowse AS ITEMIDLIST PTR
IF SUCCEEDED(SHGetFolderLocation(NULL, CSIDL_PROGRAM_FILES, NULL, 0, @pidlBrowse)) THEN
peb->BrowseToIDList(pidlBrowse, SBSP_ABSOLUTE)
ILFree(pidlBrowse)
END IF
RETURN 0
' // Sent when the user selects a command item from a menu, when a control sends a
' // notification message to its parent window, or when an accelerator keystroke is translated.
CASE WM_COMMAND
SELECT CASE CBCTL(wParam, lParam)
CASE IDCANCEL
' // If ESC key pressed, close the application by sending an WM_CLOSE message
IF CBCTLMSG(wParam, lParam) = BN_CLICKED THEN SendMessageW(hwnd, WM_CLOSE, 0, 0)
END SELECT
RETURN 0
CASE WM_SIZE
' // Resize the explorer browser
DIM rc AS REct
GetClientRect hwnd, @rc
IF peb THEN peb->SetRect(NULL, rc)
RETURN 0
CASE WM_DESTROY
' // Destroy the CExplorerBrowser class
IF peb THEN Delete peb
' // End the application by sending an WM_QUIT message
PostQuitMessage(0)
RETURN 0
END SELECT
' // Default processing of Windows messages
FUNCTION = DefWindowProcW(hwnd, uMsg, wParam, lParam)
END FUNCTION
' ========================================================================================
Notifies clients that the Explorer browser has successfully navigated to a Shell folder.
FUNCTION OnNavigationComplete (BYVAL pidlFolder AS PCIDLIST_ABSOLUTE) AS HRESULT
| Parameter | Description |
|---|---|
| pidlFolder | A PIDL that specifies the folder. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
This method is called after method OnViewCreated, assuming a successful view creation.
After a navigation and view creation, either OnNavigationComplete or OnNavigationFailed is called depending on whether the destination could be navigated to. For example, a failure to navigate includes a destination that is not reached either because there is no route to the path or the user has canceled.
Notifies clients that the Explorer browser has failed to navigate to a Shell folder.
FUNCTION OnNavigationFailed (BYVAL pidlFolder AS PCIDLIST_ABSOLUTE) AS HRESULT
| Parameter | Description |
|---|---|
| pidlFolder | A PIDL that specifies the folder. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
This method is called after method OnViewCreated, assuming a successful view creation.
After a navigation and view creation, either OnNavigationComplete or OnNavigationFailed is called, depending on whether the destination could be navigated to. For example, a failure to navigate includes a destination that is not reached either because there is no route to the path or the user has canceled.
Notifies clients of a pending Explorer browser navigation to a Shell folder.
FUNCTION OnNavigationPending (BYVAL pidlFolder AS PCIDLIST_ABSOLUTE) AS HRESULT
| Parameter | Description |
|---|---|
| pidlFolder | A PIDL that specifies the folder. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
Explorer browser calls this method before it navigates to a folder, that is, before calling OnNavigationFailed or OnNavigationComplete.
Returning any failure code from this method, including E_NOTIMPL, will cancel the navigation.
Notifies clients that the view of the Explorer browser has been created and can be modified.
FUNCTION OnViewCreated (BYVAL psv AS IShellView PTR) AS HRESULT
| Parameter | Description |
|---|---|
| psv | A pointer to an IShellView interface. |
If this method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.
An Explorer browser calls this method to enable the client to perform any modifications to the Explorer browser view before it is shown; for example, to set view modes or folder flags.